<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php学习笔记[038]</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="show"><span>038 正则表达式三(模式修正符)</span></div>
<?php include 'include/top.php';?>
<div class="text">
<b>正则表达式的运算顺序</b>
1.<strong>()</strong>  圆括号因为是内存处理所以最高<br />
2.<strong>*,？,+,{}</strong> 重复匹配内容其次<br />
3.<strong>^,$,\b</strong> 边界处理第三<br />
4.<strong>|</strong>条件处理第四<br />
5.最后按照运算顺序计算匹配<br />
</div>

<div class="text">
<b>模式修正符</b>
为了弥补表达式中一些功能的不足，引入了模式修正符<br />
模式修正符写在结束符后面如：<br />
<b>/正则表达式/模式修正符</b>
下面是常用的模式修正符<br />
<strong>i</strong> 不区分大小写（默认是区分的）<br />
<strong>m</strong> 在使用<strong>^</strong>和<strong>$</strong>时只要在行首或行尾即认为匹配成功，而不必须在内容首或内容尾<br />
<strong>s</strong> 使匹配时内容的回车符失效，常常用于(<strong>.*</strong>)的组合<br />
<strong>x</strong> 忽略表达式中的空白<br />
<hr>
<strong>A</strong> 匹配必须从内容头部开始，不允许在之前有任何内容包含空格换行等<br />
<strong>D</strong> 内容尾部必须完全匹配，不允许在之后有任何内容包含空格换行等<br />
<strong>U</strong> 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束，常用在采集程序上的正则表达式如内容中出现多个<strong>&gt;</strong>可值选择第一个出现的<br />
</div>
<div class="text">
<b>常用的正则表达式汇总</b>
<div class="code">
1.    平时做网站经常要用正则表达式，下面是一些讲解和例子，仅供大家参考和修改使用：<br />
2.    &quot;^\d+$&quot;　　//非负整数（正整数 + 0）<br />
3.    &quot;^[0-9]*[1-9][0-9]*$&quot;　　//正整数<br />
4.    &quot;^((-\d+)|(0+))$&quot;　　//非正整数（负整数 + 0）<br />
5.    &quot;^-[0-9]*[1-9][0-9]*$&quot;　　//负整数<br />
6.    &quot;^-?\d+$&quot;　　　　//整数<br />
7.    &quot;^\d+(\.\d+)?$&quot;　　//非负浮点数（正浮点数 + 0）<br />
8.    &quot;^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$&quot;　　//正浮点数<br />
9.    &quot;^((-\d+(\.\d+)?)|(0+(\.0+)?))$&quot;　　//非正浮点数（负浮点数 + 0）<br />
10.    &quot;^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$&quot;　　//负浮点数<br />
11.    &quot;^(-?\d+)(\.\d+)?$&quot;　　//浮点数<br />
12.    &quot;^[A-Za-z]+$&quot;　　//由26个英文字母组成的字符串<br />
13.    &quot;^[A-Z]+$&quot;　　//由26个英文字母的大写组成的字符串<br />
14.    &quot;^[a-z]+$&quot;　　//由26个英文字母的小写组成的字符串<br />
15.    &quot;^[A-Za-z0-9]+$&quot;　　//由数字和26个英文字母组成的字符串<br />
16.    &quot;^\w+$&quot;　　//由数字、26个英文字母或者下划线组成的字符串<br />
17.    &quot;^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$&quot;　　　　//email地址<br />
18.    &quot;^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$&quot;　　//url<br />
19.    /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日<br />
20.    /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年<br />
21.    &quot;^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$&quot;   //Emil<br />
22.    /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码<br />
23.    &quot;^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$&quot;   //IP地址<br />
24. <br />
25.    匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br />
26.    匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br />
27.    匹配空行的正则表达式：\n[\s| ]*\r<br />
28.    匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/<br />
29.    匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br />
30.    匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />
31.    匹配网址URL的正则表达式：^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$<br />
32.    匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />
33.    匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})?<br />
34.    匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$<br />
35. <br />
36. <br />
37.    元字符及其在正则表达式上下文中的行为：<br />
38. <br />
39.    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。<br />
40. <br />
41.    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。<br />
42. <br />
43.    $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。<br />
44. <br />
45.    * 匹配前面的子表达式零次或多次。<br />
46. <br />
47.    + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。<br />
48. <br />
49.    ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。<br />
50. <br />
51.    {n} n 是一个非负整数，匹配确定的n 次。<br />
52. <br />
53.    {n,} n 是一个非负整数，至少匹配n 次。<br />
54. <br />
55.    {n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。<br />
56. <br />
57.    ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。<br />
58. <br />
59.    . 匹配除 &quot;\n&quot; 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。<br />
60.    (pattern) 匹配pattern 并获取这一匹配。<br />
61. <br />
62.    (?:pattern) 匹配pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。<br />
63. <br />
64.    (?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。<br />
65. <br />
66.    (?!pattern) 负向预查，与(?=pattern)作用相反<br />
67. <br />
68.    x|y 匹配 x 或 y。<br />
69. <br />
70.    [xyz] 字符集合。<br />
71. <br />
72.    [^xyz] 负值字符集合。<br />
73. <br />
74.    [a-z] 字符范围，匹配指定范围内的任意字符。<br />
75. <br />
76.    [^a-z] 负值字符范围，匹配任何不在指定范围内的任意字符。<br />
77. <br />
78.    \b 匹配一个单词边界，也就是指单词和空格间的位置。<br />
79. <br />
80.    \B 匹配非单词边界。<br />
81. <br />
82.    \cx 匹配由x指明的控制字符。<br />
83. <br />
84.    \d 匹配一个数字字符。等价于 [0-9]。<br />
85. <br />
86.    \D 匹配一个非数字字符。等价于 [^0-9]。<br />
87. <br />
88.    \f 匹配一个换页符。等价于 \x0c 和 \cL。<br />
89. <br />
90.    \n 匹配一个换行符。等价于 \x0a 和 \cJ。<br />
91. <br />
92.    \r 匹配一个回车符。等价于 \x0d 和 \cM。<br />
93. <br />
94.    \s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。<br />
95. <br />
96.    \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。<br />
97. <br />
98.    \t 匹配一个制表符。等价于 \x09 和 \cI。<br />
99. <br />
100.    \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。<br />
101. <br />
102.    \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。<br />
103. <br />
104.    \W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。<br />
105. <br />
106.    \xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。<br />
107. <br />
108.    \num 匹配 num，其中num是一个正整数。对所获取的匹配的引用。<br />
109. <br />
110.    \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。<br />
111. <br />
112.    \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。<br />
113. <br />
114.    \nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。<br />
115. <br />
116.    \un 匹配 n，其中 n 是一个用四个十六进制数字表示的Unicode字符。<br />
117. <br />
118.    匹配中文字符的正则表达式： [u4e00-u9fa5]<br />
119. <br />
120.    匹配双字节字符(包括汉字在内)：[^x00-xff]<br />
121. <br />
122.    匹配空行的正则表达式：n[s| ]*r<br />
123. <br />
124.    匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*) /&gt;/<br />
125. <br />
126.    匹配首尾空格的正则表达式：(^s*)|(s*$)<br />
127. <br />
128.    匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />
129. <br />
130.    匹配网址URL的正则表达式：http://([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)?<br />
131. <br />
132.    利用正则表达式限制网页表单里的文本框输入内容：<br />
133. <br />
134.    用正则表达式限制只能输入中文：onkeyup=&quot;value=value.replace(/[^u4E00-u9FA5]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))&quot;<br />
135. <br />
136.    用正则表达式限制只能输入全角字符： onkeyup=&quot;value=value.replace(/[^uFF00-uFFFF]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))&quot;<br />
137. <br />
138.    用正则表达式限制只能输入数字：onkeyup=&quot;value=value.replace(/[^d]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot;<br />
139. <br />
140.    用正则表达式限制只能输入数字和英文：onkeyup=&quot;value=value.replace(/[W]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot;<br />
141. <br />
142.    =========常用正则式<br />
143. <br />
144. <br />
145. <br />
146.    匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br />
147. <br />
148.    匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br />
149. <br />
150.    匹配空行的正则表达式：\n[\s| ]*\r<br />
151. <br />
152.    匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/<br />
153. <br />
154.    匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br />
155. <br />
156.    匹配IP地址的正则表达式：/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //<br />
157. <br />
158.    匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />
159. <br />
160.    匹配网址URL的正则表达式：http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?<br />
161. <br />
162.    sql语句：^(select|drop|delete|create|update|insert).*$<br />
163. <br />
164.    1、非负整数：^\d+$<br />
165. <br />
166.    2、正整数：^[0-9]*[1-9][0-9]*$<br />
167. <br />
168.    3、非正整数：^((-\d+)|(0+))$<br />
169. <br />
170.    4、负整数：^-[0-9]*[1-9][0-9]*$<br />
171. <br />
172.    5、整数：^-?\d+$<br />
173. <br />
174.    6、非负浮点数：^\d+(\.\d+)?$<br />
175. <br />
176.    7、正浮点数：^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$<br />
177. <br />
178.    8、非正浮点数：^((-\d+\.\d+)?)|(0+(\.0+)?))$<br />
179. <br />
180.    9、负浮点数：^(-((正浮点数正则式)))$<br />
181. <br />
182.    10、英文字符串：^[A-Za-z]+$<br />
183. <br />
184.    11、英文大写串：^[A-Z]+$<br />
185. <br />
186.    12、英文小写串：^[a-z]+$<br />
187. <br />
188.    13、英文字符数字串：^[A-Za-z0-9]+$<br />
189. <br />
190.    14、英数字加下划线串：^\w+$<br />
191. <br />
192.    15、E-mail地址：^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$<br />
193. <br />
194.    16、URL：^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$<br />
195.    或：^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&amp;_~`@[\]\':+!]*([^&lt;&gt;\&quot;\&quot;])*$<br />
196. <br />
197.    17、邮政编码：^[1-9]\d{5}$<br />
198. <br />
199.    18、中文：^[\u0391-\uFFE5]+$<br />
200. <br />
201.    19、电话号码：^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$<br />
202. <br />
203.    20、手机号码：^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$<br />
204. <br />
205.    21、双字节字符(包括汉字在内)：^\x00-\xff<br />
206. <br />
207.    22、匹配首尾空格：(^\s*)|(\s*$)（像vbscript那样的trim函数）<br />
208. <br />
209.    23、匹配HTML标记：&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;<br />
210. <br />
211.    24、匹配空行：\n[\s| ]*\r<br />
212. <br />
213.    25、提取信息中的网络链接：(h|H)(r|R)(e|E)(f|F) *= *('|&quot;)?(\w|\\|\/|\.)+('|&quot;| *|&gt;)?<br />
214. <br />
215.    26、提取信息中的邮件地址：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />
216. <br />
217.    27、提取信息中的图片链接：(s|S)(r|R)(c|C) *= *('|&quot;)?(\w|\\|\/|\.)+('|&quot;| *|&gt;)?<br />
218. <br />
219.    28、提取信息中的IP地址：(\d+)\.(\d+)\.(\d+)\.(\d+)<br />
220. <br />
221.    29、提取信息中的中国手机号码：(86)*0*13\d{9}<br />
222. <br />
223.    30、提取信息中的中国固定电话号码：(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}<br />
224. <br />
225.    31、提取信息中的中国电话号码（包括移动和固定电话）：(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}<br />
226. <br />
227.    32、提取信息中的中国邮政编码：[1-9]{1}(\d+){5}<br />
228. <br />
229.    33、提取信息中的浮点数（即小数）：(-?\d*)\.?\d+<br />
230. <br />
231.    34、提取信息中的任何数字 ：(-?\d*)(\.\d+)?<br />
232. <br />
233.    35、IP：(\d+)\.(\d+)\.(\d+)\.(\d+)<br />
234. <br />
235.    36、电话区号：/^0\d{2,3}$/<br />
236. <br />
237.    37、腾讯QQ号：^[1-9]*[1-9][0-9]*$<br />
238. <br />
239.    38、帐号(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />
240. <br />
241.    39、中文、英文、数字及下划线：^[\u4e00-\u9fa5_a-zA-Z0-9]+$<br />
</div>
</div>

</body>
</html>
